package com.bana.fvs.protocol;

import com.bana.fvs.code.*;
import com.bana.fvs.model.Lamp;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;

/**
 * 雾灯状态通知
 */
public class NoticeLampStatus {

    public int getId()
    {
        return 0x04;
    }

    public Lamp toModel(byte[] buffer) throws IOException {
        ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
        DataInputStream dis = new DataInputStream(bais);
        dis.skipBytes(1);
        Lamp lamp=new Lamp();
        lamp.setKzqbsm(dis.readByte());
        lamp.setWdljzt(LampStatus.Normal);
        dis.skipBytes(1);
        short s1=dis.readByte();
        short s2=dis.readByte();
        lamp.setWdbm(s2*128+s1);

        lamp.setBjdm(dis.readByte());

        short s=dis.readByte();
        lamp.setMzt((s&0x02)== LampDoorStatus.Normal?LampDoorStatus.Normal:LampDoorStatus.Steal);
        lamp.setWdzt((s&0x04)== LampTemperatureStatus.Normal?LampTemperatureStatus.Normal:LampTemperatureStatus.TooHigh);
        lamp.setDyzt((s&0x08)== LampVoltageStatus.Normal?LampVoltageStatus.Normal:LampVoltageStatus.TooLow);
        lamp.setSbpd((s&0x10)== LampPairStatus.Normal?LampPairStatus.Normal:LampPairStatus.Disconnection);
        lamp.setLedzt((s&0x20)== LampLedStatus.Close?LampLedStatus.Close:LampLedStatus.Open);
        lamp.setLdzt((s&0x40)==LampRadarStatus.Close?LampRadarStatus.Close:LampRadarStatus.Open);
        if(lamp.getMzt()==LampDoorStatus.Normal&&
                lamp.getWdzt()==LampTemperatureStatus.Normal&&
                lamp.getDyzt()==LampVoltageStatus.Normal&&
                lamp.getWdljzt()==LampStatus.Normal)
        {
            lamp.setSbzt(DeviceStatus.Noraml);
        }
        else
        {
            lamp.setSbzt(DeviceStatus.Error);
        }
        lamp.setDdyzt((dis.readByte()&0x40)==LampVoltageStatus.Normal?LampVoltageStatus.Normal:LampVoltageStatus.TooLow);

        s1=dis.readByte();
        s2=dis.readByte();
        lamp.setXdcdy(s2*128+s1);

        s1=dis.readByte();
        s2=dis.readByte();
        lamp.setTyndy(s2*128+s1);

        s1=dis.readByte();
        s2=dis.readByte();
        if(s2==0)
        {
            lamp.setWdwd(s1);
        }
        else
        {
            lamp.setWdwd(-s1);
        }
        dis.close();
        bais.close();
        return lamp;
    }
}
